/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Dao;

import Bean.AdvogadoBean;
import Bean.CadastroClienteBean;
import Bean.CadastroProcessoBean;
import Utils.Conexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author william
 */
public class CadastroProcessoDao {

    public static void salvar(CadastroProcessoBean p) throws SQLException {
        java.sql.Connection con;
        con = Conexao.getConexao();
        String sql = "insert into processo (id_processo,numero_processo,descricao,valor_acao,situacao,id_advogado,idcliente,tipo_processo,data_processo,idcliente2) values (?,?,?,?,?,?,?,?,?,?)";
        java.sql.PreparedStatement stmt = con.prepareStatement(sql);
        stmt.setInt(1, p.getIdProcesso());
        stmt.setString(2, p.getNumeroProcesso());
        stmt.setString(3, p.getDescricao());
        stmt.setString(4, p.getValorProcesso());
        stmt.setString(5, p.getSituacaoProcesso());
        stmt.setInt(6, p.getControleAdvogado().getIdavogado());
        stmt.setInt(7, p.getControleCliente().getIdcliente());
        stmt.setString(8, p.getTipoProcesso());
        stmt.setString(9, p.getDataProcesso());
        try {
            stmt.setInt(10, p.getControleCliente2().getIdcliente());
        } catch (NullPointerException e) {
            stmt.setString(10, null);
        }
        stmt.execute();
        stmt.close();
        con.close();
    }

    public static void alterar(CadastroProcessoBean p) throws SQLException {
        Connection con;
        con = Conexao.getConexao();
        String query = "update processo set numero_processo = ?, descricao = ?, valor_acao = ?, situacao = ?, id_advogado = ?, idcliente = ?, tipo_processo = ?, data_processo = ?, idcliente2 = ? where id_processo = ?";
        PreparedStatement stmt = con.prepareStatement(query);
        stmt.setString(1, p.getNumeroProcesso());
        stmt.setString(2, p.getDescricao());
        stmt.setString(3, p.getValorProcesso());
        stmt.setString(4, p.getSituacaoProcesso());
        stmt.setInt(5, p.getControleAdvogado().getIdavogado());
        stmt.setInt(6, p.getControleCliente().getIdcliente());
        stmt.setString(7, p.getTipoProcesso());
        stmt.setString(8, p.getDataProcesso());
        try {
            stmt.setInt(9, p.getControleCliente2().getIdcliente());
        } catch (NullPointerException e) {
            stmt.setString(9, null);
        }
        stmt.setInt(10, p.getIdProcesso());
        stmt.executeUpdate();
        stmt.close();
        con.close();
    }

    public static void excluir(int id) throws SQLException {
        Connection con = Conexao.getConexao();
        String sql = "delete from processo where id_processo=" + id;
        PreparedStatement stmt = con.prepareStatement(sql);
        stmt.executeUpdate();
        stmt.close();
        con.close();
    }

    public static List<CadastroProcessoBean> getLista(int idCliente) throws SQLException {
        List<CadastroProcessoBean> lista = new ArrayList<CadastroProcessoBean>();
        Connection con = Conexao.getConexao();
        String sql = "Select processo.id_processo, processo.numero_processo"
                + "  From processo, cliente"
                + " WHere processo.idcliente = cliente.idcliente "
                + " and processo.idcliente = " + idCliente;

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {

            CadastroProcessoBean p = new CadastroProcessoBean();
            p.setIdProcesso(rs.getInt("id_processo"));
            p.setNumeroProcesso(rs.getString("numero_processo"));
            lista.add(p);
        }
        stmt.close();
        rs.close();
        con.close();
        return lista;
    }

    public static List<CadastroProcessoBean> getLista() throws SQLException {
        List<CadastroProcessoBean> lista = new ArrayList<CadastroProcessoBean>();
        Connection con = Conexao.getConexao();
        String sql = "SELECT processo.`numero_processo` AS processo_numero_processo,"
                + " cliente.`nome_cliente` AS cliente_nome_cliente,"
                + " cliente.`cpf` AS cliente_cpf,"
                + " advogado.`nome_advogado` AS advogado_nome_advogado,"
                + " processo.`numero_processo` AS processo_numero_processo,"
                + " processo.`situacao` AS processo_situacao,"
                + " processo.`tipo_processo` AS processo_tipo_processo,"
                + " processo.`valor_acao` AS processo_valor_acao,"
                + " processo.`descricao` AS processo_descricao,"
                + " processo.`data_processo` AS processo_data_processo,"
                + " processo.`id_processo` AS processo_id_processo,"
                + " cliente2.nome_cliente AS cliente2_nome, "
                + " cliente2.`cpf` AS cliente2_cpf"
                + " FROM `advogado` advogado"
                + " INNER JOIN `processo` processo ON advogado.`id_advogado` = processo.`id_advogado`"
                + " INNER JOIN `cliente` cliente ON processo.`idcliente` = cliente.`idcliente`"
                + " LEFT JOIN `cliente` cliente2 ON processo.`idcliente2` = cliente2.`idcliente`";
        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {

            CadastroProcessoBean p = new CadastroProcessoBean();
            p.setIdProcesso(rs.getInt("processo_id_processo"));
            p.setNumeroProcesso(rs.getString("processo_numero_processo"));
            p.setTipoProcesso(rs.getString("processo_tipo_processo"));
            p.setSituacaoProcesso(rs.getString("processo_situacao"));
            p.setValorProcesso(rs.getString("processo_valor_acao"));
            p.setDescricao(rs.getString("processo_descricao"));
            p.setDataProcesso(rs.getString("processo_data_processo"));

            CadastroClienteBean c = new CadastroClienteBean();
            c.setNome(rs.getString("cliente_nome_cliente"));
            c.setCpf(rs.getString("cliente_cpf"));

            CadastroClienteBean c2 = new CadastroClienteBean();
            c2.setNome(rs.getString("cliente2_nome"));
            c2.setCpf(rs.getString("cliente2_cpf"));

            AdvogadoBean a = new AdvogadoBean();
            a.setNome(rs.getString("advogado_nome_advogado"));

            p.setControleCliente(c);
            p.setControleCliente2(c2);
            p.setControleAdvogado(a);
            lista.add(p);
        }
        stmt.close();
        rs.close();
        con.close();
        return lista;
    }

    public static String queryRelatorio(boolean opc, String tipo, String filtro) throws SQLException {
        String sql = "";
        if (opc) {
            sql = "SELECT processo.`numero_processo` AS processo_numero_processo,"
                    + " cliente.`nome_cliente` AS cliente_nome_cliente,"
                    + " cliente.`cpf` AS cliente_cpf,"
                    + " advogado.`nome_advogado` AS advogado_nome_advogado,"
                    + " processo.`numero_processo` AS processo_numero_processo,"
                    + " processo.`situacao` AS processo_situacao,"
                    + " processo.`tipo_processo` AS processo_tipo_processo,"
                    + " processo.`valor_acao` AS processo_valor_acao,"
                    + " processo.`descricao` AS processo_descricao,"
                    + " processo.`data_processo` AS processo_data_processo,"
                    + " processo.`id_processo` AS processo_id_processo,"
                    + " cliente2.nome_cliente AS cliente2_nome, "
                    + " cliente2.`cpf` AS cliente2_cpf"
                    + " FROM `advogado` advogado"
                    + " INNER JOIN `processo` processo ON advogado.`id_advogado` = processo.`id_advogado`"
                    + " INNER JOIN `cliente` cliente ON processo.`idcliente` = cliente.`idcliente`"
                    + " LEFT JOIN `cliente` cliente2 ON processo.`idcliente2` = cliente2.`idcliente`";
        } else {
            sql = "SELECT processo.`numero_processo` AS processo_numero_processo,"
                    + " cliente.`nome_cliente` AS cliente_nome_cliente,"
                    + " cliente.`cpf` AS cliente_cpf,"
                    + " advogado.`nome_advogado` AS advogado_nome_advogado,"
                    + " processo.`numero_processo` AS processo_numero_processo,"
                    + " processo.`situacao` AS processo_situacao,"
                    + " processo.`tipo_processo` AS processo_tipo_processo,"
                    + " processo.`valor_acao` AS processo_valor_acao,"
                    + " processo.`descricao` AS processo_descricao,"
                    + " processo.`data_processo` AS processo_data_processo,"
                    + " processo.`id_processo` AS processo_id_processo,"
                    + " cliente2.nome_cliente AS cliente2_nome, "
                    + " cliente2.`cpf` AS cliente2_cpf"
                    + " FROM `advogado` advogado"
                    + " INNER JOIN `processo` processo ON advogado.`id_advogado` = processo.`id_advogado`"
                    + " INNER JOIN `cliente` cliente ON processo.`idcliente` = cliente.`idcliente`"
                    + " LEFT JOIN `cliente` cliente2 ON processo.`idcliente2` = cliente2.`idcliente`";
            if (tipo.equalsIgnoreCase("cliente")) {
                sql += " where cliente.nome_cliente like '%" + filtro + "%'";
            } else if (tipo.equalsIgnoreCase("numero processo")) {
                sql += " where processo.numero_processo like '%" + filtro + "%'";
            } else if (tipo.equalsIgnoreCase("advogado")) {
                sql += " where advogado.nome_advogado like '%" + filtro + "%'";
            } else if (tipo.equalsIgnoreCase("tipo processo")) {
                sql += " where processo.tipo_processo like '%" + filtro + "%'";
            }
        }
        return sql;
    }

    public static List<CadastroProcessoBean> getLista(String tipo, String filtro) throws SQLException {
        List<CadastroProcessoBean> lista = new ArrayList<CadastroProcessoBean>();
        Connection con = Conexao.getConexao();
        String sql = "SELECT processo.`numero_processo` AS processo_numero_processo,"
                + " cliente.`nome_cliente` AS cliente_nome_cliente,"
                + " cliente.`cpf` AS cliente_cpf,"
                + " advogado.`nome_advogado` AS advogado_nome_advogado,"
                + " processo.`numero_processo` AS processo_numero_processo,"
                + " processo.`situacao` AS processo_situacao,"
                + " processo.`tipo_processo` AS processo_tipo_processo,"
                + " processo.`valor_acao` AS processo_valor_acao,"
                + " processo.`descricao` AS processo_descricao,"
                + " processo.`data_processo` AS processo_data_processo,"
                + " processo.`id_processo` AS processo_id_processo,"
                + " cliente2.nome_cliente AS cliente2_nome, "
                + " cliente2.`cpf` AS cliente2_cpf"
                + " FROM `advogado` advogado"
                + " INNER JOIN `processo` processo ON advogado.`id_advogado` = processo.`id_advogado`"
                + " INNER JOIN `cliente` cliente ON processo.`idcliente` = cliente.`idcliente`"
                + " LEFT JOIN `cliente` cliente2 ON processo.`idcliente2` = cliente2.`idcliente`";

        if (tipo.equalsIgnoreCase("cliente")) {
            sql += " where cliente.nome_cliente like '%" + filtro + "%'";
        } else if (tipo.equalsIgnoreCase("numero processo")) {
            sql += " where processo.numero_processo like '%" + filtro + "%'";
        } else if (tipo.equalsIgnoreCase("advogado")) {
            sql += " where advogado.nome_advogado like '%" + filtro + "%'";
        } else if (tipo.equalsIgnoreCase("tipo processo")) {
            sql += " where processo.tipo_processo like '%" + filtro + "%'";
        }

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {

            CadastroProcessoBean p = new CadastroProcessoBean();
            p.setIdProcesso(rs.getInt("processo_id_processo"));
            p.setNumeroProcesso(rs.getString("processo_numero_processo"));
            p.setTipoProcesso(rs.getString("processo_tipo_processo"));
            p.setSituacaoProcesso(rs.getString("processo_situacao"));
            p.setValorProcesso(rs.getString("processo_valor_acao"));
            p.setDescricao(rs.getString("processo_descricao"));
            p.setDataProcesso(rs.getString("processo_data_processo"));

            CadastroClienteBean c = new CadastroClienteBean();
            c.setNome(rs.getString("cliente_nome_cliente"));
            c.setCpf(rs.getString("cliente_cpf"));

            CadastroClienteBean c2 = new CadastroClienteBean();
            c2.setNome(rs.getString("cliente2_nome"));
            c2.setCpf(rs.getString("cliente2_cpf"));

            AdvogadoBean a = new AdvogadoBean();
            a.setNome(rs.getString("advogado_nome_advogado"));

            p.setControleCliente(c);
            p.setControleCliente2(c2);
            p.setControleAdvogado(a);
            lista.add(p);
        }
        stmt.close();
        rs.close();
        con.close();
        return lista;
    }
    public static ResultSet getRsGrafico() throws SQLException{
Connection con = Conexao.getConexao();
String sql="SELECT COUNT(*) AS processos, advogado.nome_advogado"
        + " FROM advogado, processo"
        + " WHERE advogado.id_advogado = processo.id_advogado"
        + " GROUP BY advogado.id_advogado"
        + " HAVING COUNT(*)>0";
PreparedStatement stmt=con.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();

return rs;
}
}
//SELECT p.id_processo, p.descricao, c.nome_cliente from processo p,cliente c WHERE c.idcliente = p.idcliente

